package classes;

import java.util.ArrayList;

public class Menu
{

	private ArrayList<MainLink> links_ = new ArrayList<MainLink>();
	
	public void __construct()
	{}

	public ArrayList<MainLink> getLinks()
	{
		return this.links_;
	}
	
	public void setLinks( ArrayList<MainLink> links )
	{
		this.links_ = links;
	}

   /**
    * Busca um link com o identificador passado como parâmetro.
    * 
    * @param id
    *           Identificador de link a ser buscado.
    * @return Link com o identificador especificado.
    */
   public MainLink getLinkById( int id )
   {
      for ( MainLink ml : links_ )
      {
         if ( ml.getId() == id )
            return ml;
      }

      return new MainLink();
   }

   /**
    * Busca um link com o nome passado como parâmetro.
    * 
    * @param name
    *           Nome de link a ser buscado.
    * @return Link com o nome especificado.
    */
   public MainLink getLinkByName( String name )
   {
      for ( MainLink ml : links_ )
      {
         if ( ml.getText().equals( name ) )
            return ml;
      }

      return new MainLink();
   }

   /**
    * Retorna o próximo identificador para um link novo.
    * 
    * @return O próximo identificador disponível.
    */
   public int getNextIdOfLink()
   {
      int maxId = 0;

      for ( MainLink ml : links_ )
      {
         if ( maxId < ml.getId() )
            maxId = ml.getId();
      }

      return maxId + 1;
   }

   /**
    * Retorna o próximo identificador para um sublink novo.
    * 
    * @param link
    *           Link pai do sublink.
    * @return O próximo identificador disponível.
    */
   public int getNextIdOfSubLink( MainLink link )
   {
      int maxId = 0;

      for ( Link l : link.getSubLinks() )
      {
         if ( maxId < l.getId() )
            maxId = l.getId();
      }

      return maxId + 1;
   }

   /**
    * Busca o pai de um sublink.
    * 
    * @param link
    *           Link que se deseja buscar o pai.
    * @return Pai do sublink passado como argumento.
    */
   public MainLink getParentOfSubLink( Link link )
   {
      for ( MainLink ml : links_ )
      {
         if ( ml.getSubLinks().contains( link ) )
            return ml;
      }

      return null;
   }

   /**
    * Remove o sublink passado de seu objeto pai.
    */
   public void removeSubLink( Link subLink )
   {
      for ( MainLink ml : links_ )
      {
         if ( ml.getSubLinks().contains( subLink ) )
         {
            ml.getSubLinks().remove( subLink );
            break;
         }
      }
   }
}
